/*
 * @Author: SimonCK666 SimonYang223@163.com
 * @Date: 2022-05-08 19:20:27
 * @LastEditors: SimonCK666 SimonYang223@163.com
 * @LastEditTime: 2022-05-08 19:26:33
 * @FilePath: /golang-concept/L6_defer/defer.go
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
package main

// go 语言中的 defer 语句会讲其后便跟随的语句进行 延迟 处理
// 在 defer 归属的函数即将返回时，将延迟处理的语句按 defer 定义的 逆序 进行执行
// 也就是说，先被 defer 的语句就最后被执行，最后被 defer 的语句，最先被执行
// 算法类似于 stack

// defer 特性
/**
	1. 关键字 defer 用于注册延迟调用
	2. 这些调用直到 return 前才被执行。因此可以用来做资源清理
	3. 多个 derfer 语句，按照先进后出的方式执行
	4. defer 语句中的变量，在 defer 声明时就决定了
*/

// defer 用途
/**
	1. 关闭文件句柄
	2. 锁资源释放
	3. 数据库连接释放
*/

import "fmt"

func main() {
	fmt.Printf("start...\n")
	defer fmt.Printf("step1..\n")
	defer fmt.Printf("step2..\n")
	defer fmt.Printf("step3..\n")
	fmt.Printf("end...\n")


}